import DictionConstUtil from '@/utils/diction-const-util';

export default class Invest {
    /* ********************字典部分****************************** */
    // 指令用途
    static investPurpose = {
        '1': '普通指令',
        '15': '组合指令',
    } as const;
    // 投资类型
    investType = {
        '1': '可交易',
        '2': '持有到期',
        '3': '可供出售',
        '4': '贷款和应收款项',
        a: '投机',
        b: '套保',
        c: '套利',
    } as const;
    // 多空类型 持仓类型
    bullbearType = {
        '1': '多仓',
        '2': '空仓',
        '3': '远期买入',
        '4': '远期卖出',
        '5': '买断式回购远期买入',
        '6': '买断式回购远期卖出',
        '8': '证券融出',
        b: '备兑空仓',
        e: '债券借贷待反售债券',
        f: '债券借贷待购回债券',
    } as const;
    // 价格模式
    investPriceType = {
        '1': '限价',
        '2': '不限价',
    } as const;
    // 指令优先级
    investLevel = {
        '0': '无',
        '1': '从价',
        '2': '从量',
        '3': '其它基准',
        '4': '股指期货止损',
        '5': '配对交易',
        '7': '债券零股交易',
        '8': '基金网上直销',
        '9': '银行间上市买回',
        A: '统计到指令结束时间',
        B: '统计到指令成交完成',
        C: '1年以内债券',
        D: '1-3年债券',
        // "1": "普通",
        // "2": "一般",
        // "3": "优先",
    } as const;
    /**
     * 清算速度
     */
    clearSpeed = {
        '0': 'T+0',
        '1': 'T+1',
    } as const;
    /**
     * 撤单类型 下单时传递的参数
     */
    CancelType = {
        '1': '错误/禁止撤单',
        '2': '送审撤单',
        '3': '警告撤单',
        '4': '不撤单',
    } as const;
    /**
     * 结算方式
     */
    settleType = {
        '1': '全额结算',
        '2': '净额结算',
        '3': '债券对付',
    } as const;
    /**
     * 手续费方式
     */
    feeType = {
        '1': '手续费不另返',
        '2': '手续费另返',
        '3': '不计手续费',
    } as const;
    /**
     * 巨额赎回标志
     */
    bulkType = {
        '1': '撤销',
        '2': '顺延',
    } as const;
    /**
     * 到期类型
     */
    mutureType = {
        '1': '确定期限',
        '2': '确定日期',
    } as const;
    /**
     * 支取限制
     */
    advanceLimitFlag = {
        // "0": "不控制",
        '1': '不可提前支取',
        '2': '可提前支取无利息损失',
        '3': '可提前支取但损失利息',
        '4': '无条件可提前支取',
    } as const;
    /**
     * 存款类型
     */
    depositType = {
        '1': '定期存款',
        '2': '通知存款',
        '3': '协议存款',
        '6': '次级债务'
    } as const;

    /**
     * 通知存款类型
     */
    noticeType = {
        '1': '另行通知',
        '2': '确定日期',
    } as const;
    /**
     * 指令状态
     */
    instructionStatus = {
        '1': '有效',
        '2': '已修改',
        '3': '已撤销',
        '4': '已暂停',
        '5': '审批拒绝',
        '6': '分发拒绝',
        '7': '指令录入',
        '8': '分仓失败',
        '9': '草稿指令',
        a: '临时下达',
        b: '临时修改',
        e: '固收已修改'
    } as const;
    /**
     * 请求类型 / 指令类型
     */
    requestType = {
        '1': '试算',
        '2': '下单',
        '3': '恒生数据添加',
        '4': '撤单',
        '5': '恒生撤单',
        '8': '旁路计算',
        '10': '下单到风控(预埋单)',
    } as const;
    /**
     * 指令类型
     */
    instructionType = {
        '1': '债券买卖业务',
        '2': '回购',
        '3': '存款',
        '4': '交易所',
        '5': '一级债券',
        '6': '期货指令',
        '7': '交易所大宗交易指令',
        '8': '场外开基',
        '9': '网下申购指令',
    } as const;
    /**
     * 风控类型
     */
    entryType = {
        '0': '资产类',
        '1': '数量类',
        '2': '指标控制类',
        '3': '同向反向控制',
        '4': '时间期限类',
        '5': '范围控制类',
        '6': '交易额控制类',
        '8': '单笔控制',
        '9': '单一行业权重控制',
        '10': '个数控制类',
    } as const;
    /**
     * 比较方向 适用于范围配置
     */
    CompareDirection = {
        '0': '大于',
        '1': '小于',
        '2': '大于等于',
        '3': '小于等于',
        '4': '等于',
        '5': '不等于',
        '6': '无',
    } as const;
    ThresholdType = {
        '0': '合规',
        '1': '警告',
        '2': '送审',
        '3': '禁止',
        '4': '错误',
    } as const;
    tenderWayType = {
        '1': '一级缴款',
        '2': '上市买入',
    } as const;
    bidSubjectType = {
        '1': '利率',
        '3': '价格',
    } as const;

    advanceLimitFlagType = {
        '1': '不可提前支取',
        '2': '可提前支取无利息损失',
        '3': '可提前支取但损失利息',
        '4': '无条件可提前支取',
    } as const;
    orderPriceType = {
        '1': '限价',
        '2': '市价',
    } as const;

    strategyPlacing = {
        '0': '无限售流通股出借',
        '1': '限售出借',
    } as const;

    /**
     * 根据证券类别获取可用的 订单方向
     */
    GetSideType(stockType) {
        if (!stockType) {
            return [];
        }
        // 证券类型枚举
        const stockTypeE = (DictionConstUtil.FNStockType() as any).find(item => item.dictKey === stockType);
        if (stockTypeE && stockTypeE.param1) {
            const tradeD: any = DictionConstUtil.FNTradeDirection();
            return tradeD.filter(item => stockTypeE.param1.includes(item.dictKey));
        }
        return [];
    }
}
